package com.atguigu.srb.common.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class R<T> {
    private Integer code;//200表示成功  其它失败， -1 表示默认失败

    private String message;//描述状态码

    private T data;//成功才有
    public static <T> R<T> ok(){
        //创建成功的R对象
        return R.ok(null);
    }
    public static <T> R<T> ok(T data){
        //创建成功的R对象
//        R r = new R<>(200,"SUCCESS" ,data);
        return R.build(ResultCodeEnum.OK).data(data);
    }
    public static <T> R<T> fail(){
        //创建失败的R对象
//        R r = new R<>(-1,"ERROR" ,null);
        return R.build(ResultCodeEnum.FAIL);
    }
    public static<T> R<T> build(ResultCodeEnum resultCodeEnum){
        return new R().code(resultCodeEnum.getCode()).message(resultCodeEnum.getMessage());
    }
    //链式调用方法： 调用后返回对象本身
    //修改R对象code值的方法
    public R code(Integer code){
        this.setCode(code);
        return this;
    }
    public R message(String message){
        this.setMessage(message);
        return this;
    }
    public R data(T data){
        this.setData(data);
        return this;
    }
    //硬编码： 将固定的值和代码耦合
//    public static void main(String[] args) {
//        R<Object> r = R.ok();
//        System.out.println(r);
//        R r2 = R.ok().message("测试 修改  message值").code(211).data("hehe");
//        System.out.println("r2 = " + r2);
//
//    }
}
